<?php
namespace app\api\controller;


use app\extra\DBCont;
use think\Db;

/**
 * @title 获取选手详情
 * @description 接口说明
 * @group 移动端投票
 * @header name:authorization require:1 default: desc:登陆的token
 */
class Player extends Base
{
    protected $_order = 'id desc';

    /**
     * @title 获取选手详情
     * @description 获取选手详情，自动增加访问量
     * @author hardy
     * @url /api/Player
     * @method GET
     *
     * @param name:id type:int require:1 default:1 other: desc:选手id
     *
     * @return title:投票名称
     * @return start_enroll:报名开始时间
     * @return end_enroll:报名结束时间
     * @return start_time:活动开始时间
     * @return end_time:活动结束时间
     * @return vote_type:投票类型：单选投票、必选投票、多选投票
     * @return vote_limit:投票限制
     * @return period:投票周期：固定次数、周期次数
     * @return period_value:周期次数
     * @return sort_way:排序方式：编号正序、票数倒序、时间排序
     * @return init_vote:初始票数
     * @return init_browse:初始访问量
     * @return images:图片
     * @return content:内容
     * @return ranking:排名
     *
     */
    public function gets()
    {
        // browse
        $id = input('get.id');
        if(empty($id)){
            $this->responseFail('id必须');
        }
        $map['id'] = $id;
        $model = model($this->controller);
        $data = $model->getOne($map);
        if(empty($data)){
            $this->responseSuccess();
        }
        $data_list = model('Player')->where('vote_id', $data['vote_id'])->field(['id','rank() over(order by (poll+init_vote) desc) as ranking'])->select();
        $data['ranking'] = 0;
        model('Visit')->addPageView($id, $data['vote_id']);
        foreach ($data_list as $item){
            if ($item['id'] == $data['id']){
                $data['ranking'] = $item['ranking'];
            }
        }
        $this->responseSuccess($data);
    }
    protected function _searchPage(&$where)
    {
        $data = input('get.');
        if (empty($data['vote_id'])){
            $this->responseFail('不存在该活动');
        }
        $where[] = ['vote_id','=', $data['vote_id']];
        $key = 'title';
        if(isset($data[$key]) && $data[$key] !== ''){
            $where[] = [$key,'=', $data[$key]];
        }
    }
    /**
     * @title 获取排行榜
     * @description 获取排行榜
     * @author hardy
     * @url /api/Player/rank
     * @method GET
     *
     * @param name:vote_id type:int require:0 default:1 other: desc:活动id
     *
     * @return id:id
     * @return number:编号
     * @return title:选手名称
     * @return works:作品
     * @return cover:封面
     * @return votes:票数
     * @return ranking:排名
     *
     * @return list:消息列表,有page参数则返回值list，list是一个数组，
     * @return size:每页最大数，默认20，可由前端传递参数决定 page参数返回值，
     * @return page:当前页，page参数返回值，
     * @return count:总记录数， page参数返回值，
     */
    public function rank(){
        $vote_id = input('get.vote_id');
        //  ,number,,
        $vote = (int)model('Player')->where('id', $vote_id)->value('init_vote');
        $data = model('Player')->where('vote_id', $vote_id)->field(['id','number','title','works','cover', "poll+init_vote+{$vote} as votes", 'rank() over(order by (poll+init_vote) desc) as ranking'])->select();
        $this->responseSuccess($data);

    }
    /**
     * @title 获取选手列表
     * @description 接口说明
     * @author hardy
     * @url /api/Player
     * @method GET
     *
     * @param name:vote_id type:int require:1 default: other: desc:活动id
     * @param name:number type:int require:0 default: other: desc:选手编号
     * @param name:title type:int require:0 default: other: desc:选手名称
     * @param name:page type:int require:0 default:1 other: desc:页码数 获取第二页以上的数据必填，默认值为1
     * @param name:size type:int require:0 default:20 other: desc:每一页的数量，默认20
     * @param name:title type:string require: default: other: desc:活动名称
     *
     * @return title:投票名称
     * @return start_enroll:报名开始时间
     * @return end_enroll:报名结束时间
     * @return start_time:活动开始时间
     * @return end_time:活动结束时间
     * @return vote_type:投票类型：单选投票、必选投票、多选投票
     * @return vote_limit:投票限制
     * @return period:投票周期：固定次数、周期次数
     * @return period_value:周期次数
     * @return sort_way:排序方式：编号正序、票数倒序、时间排序
     * @return init_vote:初始票数
     * @return init_browse:初始访问量
     * @return images:图片
     * @return content:内容
     * @return ranking:排名
     *
     * @return list:消息列表,有page参数则返回值list，list是一个数组，
     * @return size:每页最大数，默认20，可由前端传递参数决定 page参数返回值，
     * @return page:当前页，page参数返回值，
     * @return count:总记录数， page参数返回值，
     */
    public function playerList(){
        $map = [
            ['status', '=', DBCont::SUCCESS]
        ];
        $this->_searchPage($map);
        $this->responsePage($map, $this->_order, $this->controller);
    }
}